/*
 * Author: http://www.redwolf-soft.com
 * All Rights Reserved
 * 
 * 2013.11
 *   
 * */
package com.redwolfsoft.libshoppingserver.datafetcher;

import java.util.List;

import com.redwolfsoft.libshoppingserver.brand.BrandAuthorizedShopInfo;
import com.redwolfsoft.libshoppingserver.brand.BrandShopInfo;
import com.redwolfsoft.libshoppingserver.brand.CommentInfo;
import com.redwolfsoft.libshoppingserver.brand.BrandShopArea;
import com.redwolfsoft.libshoppingserver.brand.BrandStoryInfo;
import com.redwolfsoft.libshoppingserver.brand.CountryCategory;
import com.redwolfsoft.libshoppingserver.brand.NewProductInfo;
import com.redwolfsoft.libshoppingserver.brand.RecommendCategoryInfo;
import com.redwolfsoft.libshoppingserver.favorite.FavoriteBrandItemInfo;
import com.redwolfsoft.libshoppingserver.favorite.FavoriteShoppingcenterItemInfo;
import com.redwolfsoft.libshoppingserver.shoppingcenter.ShoppingCenterBrandInfo;
import com.redwolfsoft.libshoppingserver.shoppingcenter.ShoppingCenterInfo;
import com.redwolfsoft.libshoppingserver.shoppingcenter.ShoppingCenterPromotionInfo;
import com.redwolfsoft.libshoppingserver.shoppingcenter.ShoppingCenterShopFloorInfo;
import com.redwolfsoft.libshoppingserver.shoppingcenter.ShoppingCenterShopInfo;

public interface DataFetcher {

	/**
	 * ppt page3:获取以国家分类的品牌列表
	 * */
	public List<CountryCategory> getCountryCategoryBrandInfoList();
	
	/**
	 * ppt page4：获取特定品牌的新品列表
	 * */
	public List<NewProductInfo> getNewProductInfoList(String brandid);
	
	/**
	 * ppt page10,page11：获取特定品牌的在特定国家的各个城市区域的专卖店列表
	 * @param page 
	 * @param latitude 值可能为0,请做特殊处理
	 * @param longitide  值可能为0,请做特殊处理
	 * */
	public List<BrandShopArea> getBrandShopAreaList(String countryid,
			String brandid, double longitide, double latitude, int page);
	
	/**
	 * ppt page9：获取特定新品的评价列表
	 * */
	public List<CommentInfo> getBrandReviewInfoList(String newproductid);
	
	/**
	 * ppt page9：添加新品的评价
	 * 添加成功返回true，否则返回false
	 * */
	public boolean addReview(String user,String deviceId, String review,String newproductid);
	
	/**
	 * ppt page13：获取特定品牌授权网店列表
	 * */
	public List<BrandAuthorizedShopInfo> getAuthorizedBrandEShopInfoList(String brandid);
	
	/**
	 * ppt page17：获取购物中心列表
	 * @param page 
	 * @param userid 
	 * @param type:
	 * 为0时，表示要获取附近购物中心列表， @param longititue 和 @param latitude 表示经纬度坐标
	 * 为1时表示获取推荐的列表，其他参数无意义;已废弃
	 * 为2时，表示搜索某地附近列表，@param address为待搜索目标
	 *
	 *参见HttpConstants.SHOPPINGCENTER_TYPE_NEARBY
	 * SHOPPINGCENTER_TYPE_RECOMMEND
	 *SHOPPINGCENTER_TYPE_SEARCH
	 * 
	 * */
	public List<ShoppingCenterInfo> getShoppingCenterInfoList
	(int type,double longititue,double latitude,String address, int page, String userid);
	
	/**
	 * getShoppingCenterInfoList的推荐类型已废弃，改为此处返回一个推荐列表
	 * 推荐列表分类诸如：亲子类，时尚类
	 * @param page 
	 * @param latitude 
	 * @param longitide
	 * @param  page 哪一页
	 * @param userid 
	 * */
	public List<RecommendCategoryInfo> getRecommendCategoryInfo(double longitide, double latitude, int page, String userid);
	
	
	/**
	 * ppt page19：获取购物中心列表促销活动列表
	 * */
	//TODO 
	public List<ShoppingCenterPromotionInfo> getShoppingCenterPromotionInfoList
	(String shoppingcenterId);
	/**
	 * ppt page20：获取特定购物中心店铺列表
	 * */
	public List<ShoppingCenterShopInfo> getShoppingCenterShopInfoList
	(String shoppingcenterId);
	
	/**
	 * ppt page18：获取特定购物中心品牌列表
	 * */
	public List<ShoppingCenterBrandInfo> getShoppingCenterBrandInfoList
	(String shoppingcenterId);
	
	/**
	 * 获取收藏的购物中心列表。可以只给ShoppingCenterInfo中的id和logourl赋值
	 * 
	 * */
	public List<FavoriteShoppingcenterItemInfo> getFavoritedShoppingCenterList
	(String user,String deviceId);
	
	/**
	 * 获取收藏的品牌列表
	 * 可以只给BrandInfo中的id和logourl赋值
	 * */
	public List<FavoriteBrandItemInfo> getFavoritedBrandInfoList
	(String user,String deviceId);

	public BrandStoryInfo getBrandStoryInfo(String brandid);

	public List<ShoppingCenterShopFloorInfo> getShoppingCenterShopFloorInfoList(
			String shoppingcenterid);

	/**
	 * 注册新用户
	 * @return 成功返回true，否则返回false
	 * 注意：下面各参数可能传递过来一个null值或者一个空字符“”，
	 * 不符合要求则返回false告诉调用者注册失败
	 * @param user 用户名 可选项，实际为昵称
	 * @param passwd 密码 必选项
	 * @param deviceid 设备id号 可选，如不需要则忽略
	 * @param email 电子邮箱 必选项
	 * @param mobile 手机号 可选项
	 * @param gender 性别 字符串“男”表示男，“女”表示女
	 * @param birthdate 生日 可选项
	 * */
	public boolean registerNewUser(String user, String passwd, String deviceid,
			String email, String mobile, String gender, String birthdate);

	/**
	 * 用户登陆
	 * @return 成功登陆则返回用户id字符串，否则返回字符串“-1”
	 * 注意：下面各参数可能传递过来一个null值或者一个空字符“”，
	 * 不符合要求则登陆失败
	 * @param email 用邮箱名登陆
	 * @param passwd 密码
	 * @param deviceid 设备id号	可选，如不需要则忽略
	 * */
	public String login(String email, String passwd, String deviceid);

	/**
	 * 退出登陆
	 * @return 成功退出则返true，否则返回false
	 * 注意：下面各参数可能传递过来一个null值或者一个空字符“”，
	 * 不符合要求则退出登陆失败
	 * @param userid 用户id
	 * @param passwd 密码
	 * @param deviceid 设备id号，可选，如不需要则忽略
	 * */
	public boolean logout(String userid, String passwd, String deviceid);

	/**
	 * ppt page9：添加故事的评价
	 * 添加成功返回true，否则返回false
	 * */
	public boolean addStoryComment(String userid, String deviceid, String review,
			String storyid);

	/**
	 * ppt page9：添加故事的评价列表
	 *
	 * */
	public List<CommentInfo> getStoryCommentInfoList(String brandid);

	/**
	 * 用户userid赞了某个新品，成功返回true，否则返回false
	 * */
	public boolean applaudNewProduct(String newproductid, String userid);

	/**
	 * @param userid若是已登陆用户，则userid为其id，若是未登陆匿名用户，userid为null或“”或“-1”
	 * @param feedback 为反馈内容
	 * @param qq 反馈者的qq，可能为空
	 * */
	public boolean addFeedback(String userid, String deviceid, String feedback, String qq);

	/**
	 * ppt page10,page11：返回搜索结果 专卖店列表
	 * @param page 
	 * @param latitude 值可能为0,请做特殊处理
	 * @param longitide 值可能为0,请做特殊处理
	 * */
	public List<BrandShopInfo> getBrandShopInfoList(String address, double longitide, double latitude, int page);

	/**
	 * 某用户收藏某购物中心，成功返回true，否则返回false
	 * 
	 * */
	public boolean favoriteShoppingCenter(String userid, String deviceid,
			String shoppingcenterid);

	/**
	 * 某用户收藏某品牌，成功返回true，否则返回false
	 * */
	public boolean favoriteBrand(String userid, String deviceid, String brandid);

	/**
	 *  查询某用户是否收藏了某品牌，收藏了则返回true，未收藏或其它情况一律返回false
	 * */
	public boolean isFavoriteBrand(String userid, String deviceid,
			String brandid);

	/**
	 *  查询某用户是否收藏了某购物中心，收藏了则返回true，未收藏或其它情况一律返回false
	 * */
	public boolean isFavoriteShoppingCenter(String userid, String deviceid,
			String shoppingcenterid);

	/**
	 * 某用户取消收藏某品牌，成功返回true，否则返回false
	 * */
	public boolean cancelFavoriteBrand(String userid, String deviceid,
			String brandid);

	/**
	 * 某用户取消收藏某购物中心，成功返回true，否则返回false
	 * 
	 * */
	public boolean cancelFavoriteShoppingcenter(String userid, String deviceid,
			String shoppingcenterid);

	/**
	 * 查询某用户是否赞了某个新品，若赞了返回true，否则返回false
	 * 
	 * */
	public boolean isApplaudNewProduct(String userid, String deviceid,
			String newproductId);
	
}
